package cn.lili.modules.grab.haiguan.service;

import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.vo.warehouse.*;
import cn.lili.modules.order.order.entity.vo.warehouse.customs.UploadCEBMessageRequest;
import com.alibaba.fastjson.JSONObject;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

/**
 * 免税仓相关接口对接
 */
public interface IFreeWarehouse {

    /**
     * 发送请求给保税仓
     * @param apiUrl 请求接口
     * @param reqBody 请求数据
     * @return 返回结果
     */
    public JSONObject sendHttpRequest(String apiUrl, Object reqBody);

    /**
     * 转运订单创建
     */
    public MultiplePackageOrderReq multiplePackageOrder();

    /**
     * 进口订单创建
     */
    public ShopSalesOrderReq shopSalesOrderCreate(Order order, List<OrderItem> orderItems);

    /**
     * 出口订单创建
     */
    public OrderExCreateReq orderExCreate();

    /**
     * 订单取消
     */
//    public Object orderCancel(String orderno);

    /**
     * 面单获取
     */
//    public Object getLabel(String searchno);

    /**
     * 轨迹查询
     */
//    public Object traceQuery(String searchno);

    /**
     * 订单列表查询
     */
    public OrderQueryListReq orderQueryList();

    /**
     * 订单详情查询
     */
//    public Object orderQueryOne(String orderno);

    /**
     * 订单拦截
     * @param orderNo 订单号
     * @param interceptType 拦截类型
     * @param remarks 备注
     * @param clientCode 客户编码
     */
    public InterceptReq intercept(String orderNo, String remarks, String interceptType, String clientCode);

    /**
     * 关闭订单拦截
     */
    public InterceptReq removeInterception();

    /**
     * 订单配载
     */
    public CreateLoadReq createLoad();

    /**
     * 清单推送
     */
    public SendManifestReq sendManifest();

    /**
     * 总单轨迹查询
     */
//    public Object queryTrace(String mawbCode);

    /**
     * 总单/提单 新增( 空总单数据, 无包裹对应关系)
     */
    public MawbCreateReq mawbCreate();

    /**
     * 订单组托/装袋/装箱  ---  订单托盘更新
     */
    public OrderPalletUpdateReq orderPalletUpdate();

    /**
     * 打印箱签
     */
    public OrderPalletPrintLabelReq orderPalletPrintLabel();

    /**
     *  --------------------快递服务接口--------------------------
     */
    /**
     * 快递轨迹更新
     */
    public TraceExpressReq traceExpress();

    /**
     * 更新运单信息
     */
    public OrderUpdateNoteReq orderUpdateNote();

    /**
     * 母运单号更新
     */
    public OrderWayBillNoReceiveReq orderWayBillNoReceive();

    /**
     *  --------------------费⽤服务接口--------------------------
     */
    /**
     * 费用明细评估查询(一票一件)     attributes.multiplePackage = true (一票多件)
     */
    public EstimateDetailReq estimateDetail();

    /**
     * 账户可用余额查询
     */
//    public Object queryAvailableBalance(String accountCode);

    /**
     * 账单查询
     */
//    public Object orderBillQuery(String orderNo);

    /**
     * 单参数
     * @param key 参数名
     * @param value 参数值
     * @return 请求参数
     */
    public JSONObject generateQueryJson(String key, String value);

    /**
     * 组装海关数据
     * @param order 订单
     * @param orderItems 子订单
     * @return 海关数据
     */
    UploadCEBMessageRequest uploadCEBMessage(Order order, List<OrderItem> orderItems);


    /**
     * 发送数据到海关
     * @param reqBody 海关数据
     * @return 海关返回信息
     */
    JSONObject sendCustomsRequest(String apiUrl,Object reqBody);

}
